#ifndef _INC_ARRAY_ITERATOR_T_H_
#define _INC_ARRAY_ITERATOR_T_H_

#include "Iterator_t.h"
#include "Array_t.h"

template<class T>
class ArrayIterator_t
	: public Iterator_t<T>
{
public:
	/**
	* Ctor
	*/
	ArrayIterator_t(const Array_t<T>& context);

	/**
	* Dtor
	*/
	virtual ~ArrayIterator_t();

	/**
	* Returns current element data
	*/
	T* get() const;

	/**
	* Returns true whether iterator has more elements to traverse
	*/
	bool hasNext() const;

	/**
	* Moves iterator to the next element in container
	*/
	void next();

private:
	const Array_t<T>& m_context; // Array
	int m_currIndex;
};

#include "ArrayIterator_t.hpp"

#endif // _INC_ARRAY_ITERATOR_T_H_